package generic;

import java.util.ArrayList;
import java.util.Iterator;

public class Demo1Generic {
    public static void main(String[] args) {
        show02();
    }
    /*
    * 创建集合对象，使用泛型
    * 好处：
    *   1.避免了类型转换的麻烦，我存储的是什么类型，取出的就是什么类型
    *   2.把运行期间异常提升到了编译期
    * 弊端：
    *    泛型是什么类型，只能存储什么类型的数据
    * */
    private static void show02() {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
//        list.add(1) 报错，规定的是什么类型只能存什么类型。
        //使用迭代器遍历list集合
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String b = it.next();
            System.out.println(b+"->"+b.length());
        }
    }

    /*
    * 创建集合对象，不适用泛型
    * 好处：
    *    集合不适用泛型，默认的类型就是Object类型，可以存储任意数据类型的数据
    * 弊端：
    *      不安全，会引发异常
    * */
    private static void show01() {
        ArrayList list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add(3);

        /*
        * 使用迭代器遍历list集合
        * 获取迭代器
        * */
        Iterator it = list.iterator();
        //使用迭代器中的方法hasNext和next遍历集合
        while(it.hasNext()){
            //取出元素也是Object类型
            Object obj =  it.next();
//            System.out.println(obj);

            //想要使用String类特有的方法Length 获取字符串的长度，不能使用
            // 多态 Object obj = "abc"
            //多态的特点：不能使用子类特有的方法
            //需要向下转型
            String s = (String)obj;
            System.out.println(s);
        }
    }


}
